以太坊存储方案路线图:挑战与机遇共存
注:本文是EthStorage团队针对以太坊历史数据丢失问题及其解决方案的综述,《极客web3》被授权首发其中文版。
Background
背景:
2023年10月22日,著名的 Go-Ethereum(Geth)开发负责人 Péter Szilágyi 在 Twitter 上表达了他对以太坊数据存储方案的担忧。他指出,虽然 Geth 客户端保留了所有历史数据,但 Nethermind 和 Besu 等其他类型的以太坊客户端,可以配置删除某些以太坊历史数据(例如历史区块)。这会让部分客户端节点的行为与其他客户端不一致,对Geth客户端运行者来说很不公平。上述话题随即引发了关于以太坊路线图中存储方案的激烈讨论。
The Storage Challenge
存储的挑战
以太坊客户端的存储要求变得越来越高。 存储以太坊历史数据没有任何协议内的激励或惩罚。
总存储大小:925.39 GB
历史数据(区块/交易收据):约 628.69 GB
Merkle Patricia Trie (MPT) 中的状态数据:约 269.74 GB
以太坊存储路线图及其后果
Vitalik 发布的以太坊路线图推文,提到了 Purge 主要涉及存储方面的内容。
不断上升的存储成本引起了以太坊生态研究人员的关注。为了解决这个问题并确保所有客户端的一致性,研究人员正在制定一些提案来明确删除以太坊客户端的历史数据。两个主要提案是:
· EIP-4444:限制执行客户端中的历史数据:该提案允许客户端删除超过一年的过往区块。假设平均区块大小为 100K,历史块数据上限约为 250 GB(100K * (3600 * 24 * 365) / 12,假设区块时间 = 12 秒)。
· EIP-4844:分片 BLOB 交易:丢弃超过 18 天的 BLOB数据。与 EIP-4444 相比,这是一种更激进的方法,将历史 BLOB 大小限制在 100 GB 左右((18 * 3600 * 24) * 128K * 6 / 12,假设区块时间 = 12 秒)。
删除所有客户端的历史数据会产生什么后果?主要的一个问题是,新节点无法通过“full sync”模式来同步到最新状态, “full sync”是一种将历史数据重放,从创世区块同步到最新区块的数据同步方案。相应地,我们必须采取“snap sync”或“state sync”来直接同步以太坊节点的最新状态。这种方法已在 Geth 中实现,并作为默认的同步运行方式。
节点删除掉以太坊主网历史数据,也会导致以太坊 L2出现问题,即新加入的Layer2节点,无法通过重放 Layer2全部历史数据的方法,同步至当前的最新状态。此外,由于 L1 节点不维护 L2 状态,L2 的“snap sync”方法无法根据Layer1区块直接派生出最新的 Layer2 状态,这违反了Layer2继承以太坊安全所需的重要假设。
预计的解决方案将依赖 Infura / Etherscan / L2 项目本身的第三方服务来存储Layer2历史数据或状态副本,这是通过协议外、间接激励实现的中心化解决方案。
我们要探讨的核心问题是:
我们能否在存储和访问方面找到更好的去中心化解决方案?
是否有可能找到给予节点直接激励、得到以太坊网络本身保障(例如,靠L1合约实现)的解决方案?
在这一切的基础上,我们是否可以为以太坊存储路线提供一种完全去中心化的、协议内直接激励的解决方案?
解决方案
解决方案1:以太坊 Portal 网络
以太坊 Portal 网络是一个轻量级、去中心化的网络,用于连接到以太坊协议。它提供eth_call,eth_getBlockByNumber等以太坊 JSON-RPC 接口,它将 JSON-RPC 请求转换为对分布式哈希表(DHT)的 P2P 请求,类似于 IPFS 网络。与允许存储任何数据类型且容易受到垃圾数据影响的 IPFS 不同,Portal P2P 网络专门托管以太坊数据,如历史区块头和交易数据,这是通过 Portal 网络内置的轻客户端验证技术来实现的。
Portal 网络的一个重要特性是。其轻量级的运行设计以及与资源受限设备的兼容性。它可以运行在具有几MB存储空间和低内存的节点之上,从而促进去中心化。即使是手机或 Raspberry Pi 设备也有可能加入该网络,为解决以太坊DA问题做出贡献。
Portal 网络的开发与以太坊客户端多样性的理念相一致,客户端采用 Rust、JavaScript 和 Nim 编写。信标网络和历史网络已可供使用,而状态网络正在积极开发中。值得注意的是,Portal 网络并不为数据存储提供直接激励。
图示:具有 100MB 存储限制的 Portal 网络Rust客户端(Trin)在运行中
解决方案2:EthStorage 网络
EthStorage 网络是一个去中心化的激励存储网络,专门用于存储 EIP-4844 BLOB,并获得 ESP 项目的资助。
· 最小信任:与需要中心化数据桥的现有解决方案不同,EthStorage 依赖于以太坊的共识和无需许可的 EthStorage 存储节点的 1/m 信任模型。存储 BLOB 的过程是这样的:用户签署一个携带 BLOB 的交易,调用存储合约的put(key, blob_idx) 方法。然后,存储合约将记录 BLOB 哈希在链上。之后存储提供商将直接从以太坊 DA 网络下载并存储 BLOB,从而绕过数据桥问题。
· 存储成本与激励相一致:当调用 put() 方法时,交易必须发送存储费(通过 msg.value)并存入合约中。在成功链下存储节点提交并验证存储证明后,这个存储费用将随着时间的推移逐渐分配给存储节点。与现有的向出块者(proposer)支付一次性存储费的以太坊存储费模型相比,随着时间的推移,支付的存储费遵循贴现现金流模型——假设随着时间的推移,存储成本将相对于 ETH价格而降低。EthStorage 引入的这一重大创新使得费用和存储节点的存储贡献保持一致。
· 存储证明:存储证明是受到数据可用性抽样的启发,而 EthStorage 中的采样是针对一段时间内的保存的BLOB。为了有效地验证链上采样,EthStorage 充分利用了智能合约和最新的 SNARK 技术发展。
· 无许可操作:EthStorage 中的任何存储节点只要存储数据并定期在链上提交存储证明,都可以获得报酬。
从模块化区块链的角度来看,EthStorage 充当以太坊存储L2,但它收取的是存储费而不是交易费。通过在链上索引 BLOB 哈希,EthStorage 是一个以太坊模块化存储层,提升存储可扩展性及降低成本(目标约为 1000 倍)。
在开发方面,EthStorage 已经与以太坊 Sepolia 测试网上的 EIP-4844 集成。我们已对 EthStorage 和以太坊 Sepolia 测试网进行压力测试,包括将大约数百 GB 的 BLOB 写入 EthStorage。超过 100 名社区参与者加入网络并成功证明了他们的本地存储。
EthStorage 网络的主要优势在于在以太坊之上提供去中心化的直接激励——就我们目前的知识而言,这是一项开创性的功能。然而,该网络的局限性在于它是专门为固定大小的 BLOB 而设计的。
EthStorage 上以太坊 Sepolia 测试网的看板